package com.cy.detectsys.util;

import com.cy.detectsys.config.CustomException;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.atomic.AtomicInteger;

@Component
public class TaskIdGenerator {



    // 从redis 取id ,确保数据不会重复
    @Resource
    private RedisUtil redisUtil;

    public String generateRWTaskId() {

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
        // 获取当前日期的字符串表示
        String datePart = dateFormat.format(new Date());

        String prefix = "RW";
        String rediskey = prefix + "_COUNTER_" + datePart;

        Integer counterValue = redisUtil.getAsInteger(rediskey);
        if (counterValue == null) {
            counterValue = 1;
        }
        redisUtil.set(rediskey, counterValue+1);
        // 如果计数器超过五位数，你需要决定如何处理（例如，重置或抛出异常）
        if (counterValue >= 100000) {
            throw new CustomException("每天只能创建10000个任务，今日已超出限制");
        }

        // 将计数器转换为五位数（如果需要的话，在前面补零）
        String counterPart = String.format("%05d", counterValue);
        // 组合日期和计数器部分来形成任务编号
        return prefix + datePart + counterPart;
    }

    public String generateTCTaskId() {

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
        // 获取当前日期的字符串表示
        String datePart = dateFormat.format(new Date());

        String prefix = "TC";
        String rediskey = prefix + "_COUNTER_" + datePart;

        Integer counterValue = redisUtil.getAsInteger(rediskey);
        if (counterValue == null) {
            counterValue = 1;
        }
        redisUtil.set(rediskey, counterValue+1);
        // 如果计数器超过五位数，你需要决定如何处理（例如，重置或抛出异常）
        if (counterValue >= 100000) {
            throw new CustomException("每天只能创建10000个任务，今日已超出限制");
        }

        // 将计数器转换为五位数（如果需要的话，在前面补零）
        String counterPart = String.format("%05d", counterValue);
        // 组合日期和计数器部分来形成任务编号
        return prefix + datePart + counterPart;
    }



    /**
     * 每次生成任务   每天自增id都会从0 开始
     * @param prefix
     * @return
     */
    public R generateTaskIdwithPrefix(String prefix) {



        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
        String datePart = dateFormat.format(new Date());

        String rediskey = prefix + "_COUNTER_" + datePart;

        Integer counterValue = redisUtil.getAsInteger(rediskey);
        if (counterValue == null) {
            counterValue = 1;
        }

        redisUtil.set(rediskey, counterValue+1);
        // 如果计数器超过五位数，你需要决定如何处理（例如，重置或抛出异常）
        if (counterValue >= 100000) {
            throw new CustomException("每天只能创建10000个任务，今日已超出限制");
        }
        // 获取当前日期的字符串表示
        // 将计数器转换为五位数（如果需要的话，在前面补零）
        String counterPart = String.format("%05d", counterValue);
        // 组合日期和计数器部分来形成任务编号
        String id = prefix + datePart + counterPart;
        return R.ok(id);
    }


}